package com.heima.freemarker.controller;

import com.heima.freemarker.pojo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 测试表现层
 * model：跳转页面，并且在后台获取数据，然后在指定的前台页面渲染数据
 * 不是json
 * 运用的springmvc技术
 * 提供了三套执行封装数据和跳转页面的方案
 * 方案一：
 *      使用model接口，所以说model其实就是LinkedHashMap的子类
 *      model.addAttribute("name","张三");表示添加封装数据
 *      跳转页面 return+页面名称 比如：return "01-basic";
 *
 * 方案二：
 *      使用的是ModelAndView，本质上是一个class类
 *      封装数据必须先执行new对象
 *      封装数据 mav.addObject("name","张三");
 *      跳转页面 mav.setViewName("01-basic");
 *
 *  方案三：
 *       使用的ModelMap,本质上是class类，是LinkedHashMap的子类
 *       我们可以把该类作为方法中的参数使用
 *       封装数据 modelMap.put("name","张三....");
 *       return+页面名称 比如：return "01-basic";
 *
 *
 */
@Controller //不可以用@RestController
@RequestMapping("/hello")
public class HelloController {
    /**
     * 专门用来封装数据，然后跳转页面
     * @return
     */
    @GetMapping
    public String testSend(Model model){
        //1. 封装数据
        model.addAttribute("name","张三");

        Student student = new Student();
        student.setName("小可爱");
        student.setAge(18);

        model.addAttribute("stu",student);

        //发送数据
        return "01-basic";
    }

    /**
     * 遍历list
     * @param model
     * @return
     */
    @GetMapping("/list")
    public String testlist(Model model){
        //1. 封装数据
        Student stu1 = new Student();
        stu1.setName("龙猫");
        stu1.setMoney(10d);
        stu1.setAge(20);

        Student stu2 = new Student();
        stu2.setName("哆啦A梦");
        stu2.setMoney(100d);
        stu2.setAge(22);

        List stuList = new ArrayList();
        stuList.add(stu1);
        stuList.add(stu2);

        model.addAttribute("stuList",stuList);

        //2. 遍历map
        Map map = new HashMap<>();
        map.put("stu1",stu1);
        map.put("stu2",stu2);

        //传递数据
        model.addAttribute("stuMap",map);

        //发送数据
        return "02-list";
    }
}
